home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / CRS / crs47.d81 / cbmhck4a.sfx / cbmhack.4-1 next >
Text File  |  1990-02-12  |  45KB  |  971 lines

  1. 10121
  2. ┴RTICLE #10121 (10178 IS LAST):
  3. ╞ROM: DUCK@PEMBVAX1.PEMBROKE.EDU
  4. ╬EWSGROUPS: COMP.SYS.CBM
  5. ╙UBJECT: ├= ╚ACKING #4 1/5
  6. ─ATE: ═ON ╧CT  5 09:56:02 1992
  7.  
  8.                    ########
  9.              ##################
  10.          ######            ######
  11.       #####
  12.     #####  ####  ####      ##       #####   ####  ####  ####  ####  ####   ##### 
  13.   #####    ##    ##      ####     ##   ##   ##  ###     ##    ####  ##   ##   ## 
  14.  #####    ########     ##  ##    ##        #####       ##    ## ## ##   ##
  15. #####    ##    ##    ########   ##   ##   ##  ###     ##    ##  ####   ##   ##
  16. #####  ####  ####  ####  ####   #####   ####  ####  ####  ####  ####   ######
  17. #####                                                                     ##
  18.  ######            ######        ╓OLUME 1, ╔SSUE #4
  19.    ##################             ╧CTOBER 5, 1992
  20.        ########
  21.  
  22. -----------------------------------------------------------------------------
  23. ┼DITOR'S ╬OTES:
  24. BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
  25.  
  26.   ═Y APOLOGIES ABOUT THIS ISSUE BEING POSTED LATER THAN WAS MENTIONED IN A
  27.   PREVIEW POST ON COMP.SYS.CBM NEWSGROUP. ─UE TO SOME PROBLEMS WITH CODING,
  28.   SCHOOL AND ═URPHY'S LAW THE ISSUE HAD TO BE DELAYED UNTIL NOW.
  29.  
  30.   ╔ HAVE ASKED THE SYSTEM ADMIN'S AT MY SITE CONCERNING A MAIL-SERVER BUT THEY
  31.   SAID THEY DID NOT HAVE ENOUGH MAN-POWER (GO FIGURE) TO GET SOMEBODY TO RUN IT. 
  32.   ╔ WILL BE IMPLEMENTING A MAIL-SERVER SYSTEM IN MY ACCOUNT IN THE NEAR
  33.   FUTURE FOR RETRIEVAL OF PROGRAMS AND BACK-ISSUES. ╔'LL POST DESCRIPTIONS OF
  34.   HOW TO USE IT IT THE NEXT ISSUE OF ├= ╚ACKING AS WELL AS ON THE NEWSGROUP
  35.   COMP.SYS.CBM WHEN ╔ FINISH WRITING IT.
  36.  
  37.   ╔N THIS ISSUE OF ├= ╚ACKING WE ALSO START ON AN AMBITIOUS TASK: ─EVELOPING
  38.   A GAME FOR BOTH THE ├128 AND ├64 MODES THAT INCLUDES ALL OF THE FEATURES
  39.   FOUND IN COMMERCIAL GAMES. ╘AKE A LOOK IN THE ╠EARNING ═╠ ├OLUMN FOR MORE
  40.   INFORMATION.
  41.  
  42.   ┴LSO, ╘HE ARTICLE CONCERNING THE 1351 MOUSE HAS _AGAIN_ BEEN DELAYED DUE
  43.   TO TIME CONSTRAINTS. ╥EST ASSURED THAT IT WILL BE IN THE NEXT ISSUE OF
  44.   ├= ╚ACKING.
  45.  
  46.   ╔F YOU ARE INTERESTED IN HELPING WRITE FOR ├= ╚ACKING PLEASE FEEL FREE TO
  47.   MAIL DUCK@PEMBVAX1.PEMBROKE.EDU (OR DUCK@HANDY.PEMBROKE.EDU). ╫E'RE ALWAYS
  48.   LOOKING FOR NEW AUTHORS ON ALMOST ANY SUBJECT, SOFTWARE OR HARDWARE.
  49.  
  50. ================================================================================ 
  51.  
  52.   ┴LSO NOTE THAT THIS ISSUE AND PRIOR ONES ARE AVAILABLE VIA ANONYMOUS FTP FROM
  53.   CCOSUN.CALTECH.EDU UNDER PUB/RKNOP/╚┴├╦╔╬╟.═┴╟.
  54.  
  55. ================================================================================ 
  56.  
  57.   ╬╧╘╔├┼: ╨ERMISSION IS GRANTED TO RE-DISTRIBUTE THIS "NET-MAGAZINE", IN 
  58.   WHOLE, FREELY FOR NON-PROFIT USE. ╚OWEVER, PLEASE CONTACT INDIVIDUAL 
  59.   AUTHORS FOR PERMISSION TO PUBLISH OR RE-DISTRIBUTE ARTICLES SEPERATELY.
  60.  
  61.      *** ┴╒╘╚╧╥╙ ╠╔╙╘┼─ ┬┼╠╧╫ ╥┼╘┴╔╬ ┴╠╠ ╥╔╟╚╘╙ ╘╧ ╘╚┼╔╥ ┴╥╘╔├╠┼╙ ***
  62.  
  63. ================================================================================ 
  64. ╔N THIS ISSUE:
  65.  
  66. ╠EARNING ═╠ - ╨ART 4
  67.  
  68.   ╔N THE NEXT ISSUE WE'LL EMBARK ON A PROJECT OF MAKING A SPACE INVADERS STYLE
  69. GAME FOR THE ├=64/128 FROM SCRATCH USING CUSTOM CHARACTERS, INTERRUPT-DRIVEN
  70. MUSIC, ANIMATION, USING THE JOYSTICK, MOUSE OR KEYBOARD. ╘HE ├64 AND ├128 
  71. VERSIONS WILL BE DEVELOPED CON-CURRENTLY, EACH PROGRAM TAKING ADVANTAGE OF 
  72. THE MACHINE'S CAPABILITIES. ╘HIS IS THE FIRST IN A SERIES - WRITTEN BY 
  73. ├RAIG ╘AYLOR.
  74.  
  75. ╘HE ─EMO ├ORNER: ╞╠╔ - MORE COLOR TO THE SCREEN
  76.  
  77. ┴LL OF US HAVE HEARD COMPLAINTS ABOUT THE COLOR CONSTRAINTS ON ├64.
  78. ╞╠╔ PICTURE CAN HAVE ALL OF THE 16 COLORS IN ONE CHARACTER POSITION.
  79. ╫HAT THEN IS THIS ╞╠╔ AND HOW IT IS DONE ? ╫RITTEN BY ╨ASI '┴LBERT' ╧JALA.
  80.  
  81. ╥╙-232 ├ONVERTER
  82.  
  83.   ╘HIS ARTICLE DETAILS PLAN FOR A ╒SER PORT ╘╧ ╥╙232 CONNECTOR USING JUST ╧╬┼
  84. ╔├ AND 4 CAPACITORS. ╘HE CIRCUIT IS INCLUDED, AND SUGGESTIONS ON ALTERNATIVE
  85. CHIPS AND PARTS ARE EXAMINED.  ╫RITTEN BY ╫ARREN ╘USTIN
  86.  
  87. ╔NTRODUCTION TO THE ╓╔├-╔╔
  88.  
  89.   ╘HIS ARTICLE EXAMINES THE ╓╔├-╔╔ CHIP IN DETAIL AND PROVIDES AN EXPLANATION
  90. OF THE VARIOUS REGISTERS ASSOCIATED WITH THE CHIP. ╫RITTEN BY ╨ASI '┴LBERT'
  91. ╧JALA.
  92.  
  93. ╠╔╘╘╠┼ ╥┼─ ╥┼┴─┼╥: ═╙-─╧╙ FILE READER FOR THE 128 AND 1571/81 DRIVES.
  94.  
  95. ╘HIS ARTICLE PRESENTS A PROGRAM THAT READS ═╙-─╧╙ FILES AND THE ROOT DIRECTORY
  96. OF ═╙-─╧╙ DISKS.  ╘HIS PROGRAM COPIES FILES FROM DISK TO DISK SO TWO DISK
  97. DRIVES ARE REQUIRED TO USE IT (OR A "VIRTUAL" DRIVE).  ╘HIS SCHEME IMPOSES NO
  98. LIMIT ON THE MAXIMUM SIZE OF A FILE TO BE TRANSFERRED.  ╘HE USER-INTERFACE
  99. CODE IS WRITTEN IN ┬┴╙╔├ AND PRESENTS A FULL-SCREEN FILE SELECTION MENU.  ╘HE
  100. GRUNT-WORK CODE IS WRITTEN IN ASSEMBLY LANGUAGE AND OPERATES AT MAXIMUM
  101. VELOSITY.  ├OMPLETE, EXPLAINED CODE LISITINGS ARE INCLUDED.  ┬Y ├RAIG ┬RUCE.
  102.  
  103. =============================================================================
  104. ╠EARNING ═ACHINE ╠ANGUAGE - ╨ART 4
  105. BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
  106.  
  107.                      +---------------------------+
  108.                      ⁿ ╙PACE ╔NVASION - ╨ART 1   ⁿ
  109.                      ⁿ                           ⁿ
  110.                      ⁿ ╨ROGRAMMING: ├RAIG ╘AYLOR ⁿ
  111.                      ⁿ ╟RAPHICS   : ╨ASI ╧JALA   ⁿ
  112.                      ⁿ ═USIC/╙OUND:              ⁿ
  113.                      ⁿ                           ⁿ
  114.                      +---------------------------+
  115.  
  116. ╔. ╔NTRODUCTION
  117.    ------------
  118.  
  119.   ╔N THIS AND FUTURE ╠EARNING ═ACHINE ╠ANGUAGE'S WE WILL DEVELOP A GAME CALLED
  120.   ╙PACE ╔NVASION. ╘HE GAME WILL BE SIMILAIR TO ╙PACE ╔NDVADERS AND WILL RUN ON
  121.   THE ├OMMODORE 64 OR THE ├OMMODORE 128 IN 80 COLUMNS. ╔T WILL FEATURE ALL THE
  122.   "FEATURES" AND "PARTS" THAT ARE FOUND IN COMMERCIAL GAMES WITH INTERRUPT-
  123.   DRIVEN MUSIC, CUSTOM CHARACTER DEFINITIONS, 100% MACHINE LANGUAGE, MULTI-LEVEL 
  124.   GAME PLAY, AND INPUT FROM THE KEYBOARD, JOYSTICK OR MOUSE.
  125.  
  126.   ╬OTE ⁿ ╔ AM LOOKING FOR SOMEONE TO HELP AID MUSIC COMPOSITION THAT WILL
  127.   -----+ BE INTRODUCED IN A LATER ISSUE. ╨ROGRAMMING OF THE 6502 IS HELPFUL
  128.   BUT NOT A REQUIREMENT. ╨LEASE EMAIL ME AT DUCK@PEMBVAX1.PEMBROKE.EDU IF
  129.   YOU ARE INTERESTED.
  130.  
  131.   ═ANY THANKS TO ╨ASI ╧JALA FOR HIS WORK WITH THE GRAPHICS IN THIS PROGRAM.
  132.  
  133.   ┴LSO PLEASE NOTE: ╘HIS ENTIRE PROGRAM HAS BEEN ASSEMBLED SUCESSFULLY WITH 
  134.   THE ┬UDDY-128 ASSEMBLER FOR BOTH THE ├=128 AND ├=64 VERSION. ─UE TO THE
  135.   LENGTH OF THE SOURCE FILES (OVER 1,500 LINES) ╔'M NOT SURE IF ┬UDDY-64 WILL
  136.   HANDLE IT. ╘HUS IF YOU GET ERRORS DURING ASSEMBLY, ALL ╔ CAN SAY IS: SORRY.
  137.   ╔F THIS IS THE CASE THEN THE NEXT ISSUE WILL HANDLE DIVIDING THE PROGRAM AND
  138.   DATA UP INTO SEGMENTS WHICH CAN THEN EACH BE LOADED SEPERATLY.
  139.  
  140.  
  141. ╔╔. ═ACHINE ╬OTES
  142.     -------------
  143.  
  144.   ╘HE ├OMMODORE 64 AND 128 PROGRAMS FOR ╙PACE ╔NVASION WILL DIFFER SLIGHTLY,
  145.   MOSTLY IN THE FOLLOWING AREAS:
  146.  
  147.        - CUSTOM CHARACTER DEFINITION
  148.        - MEMORY INITIALIZATION / SETUP
  149.        - SOUND / MUSIC
  150.  
  151.   ┬ECAUSE THE ACTUAL GAME PLAY AND THE CHANGES NESSCESARY BETWEEN THE AREAS 
  152.   LISTED ABOVE, WE WILL USE THE ┬UDDY ┴SSEMBLER NOTATION FOR CONDITIONAL 
  153.   ASSEMBLY TO ALLOW THE DEVELOPMENT OF ONLY ONE FILE CONTAINING THE SOURCE
  154.   CODE. ╔N ADDITION TO CONDITIONAL ASSEMBLY MOST OF THE ROUTINES WILL BE
  155.   WRITTEN AS ONE WITH JUMPS TO SUBROUTINES CONTAINING THE ├64 OR 128 DIRECT
  156.   CODE AS THE ALGORITHIMS ARE USUALLY THE SAME FOR EACH.
  157.  
  158.   ╔N ADDATION THERE WILL BE SEVERAL SOURCE FILES AND SOME MISCELLANEOUS INCLUDE
  159.   FILES FOR GRAPHICS AND SOUND. ╞OR THOSE OF YOU WHO ARE OR WILL BE CONVERTING
  160.   THE ASSEMBLY SOURCE OVER TO A DIFFERENT ASSEMBLER THE CONDITIONAL 
  161.   ASSEMBLY DIRECTIVES .IF (CONDITION) WILL ONLY BE TRUE IF THE CONDITION IS
  162.   NON-ZERO. ╔E: IF THE SYMBOL COMPUTER IS DEFINED AS 128 THEN THE FOLLOWING
  163.   EXAMPLE ILLUSTRATES IT:
  164.  
  165.        COMPUTER = 128
  166.        .IF COMPUTER-64         ; NON-ZERO ANSWER SO THEREFORE
  167.        ; 128 CODE GOES HERE
  168.        .ELSE
  169.        ; 64 CODE GOES HERE
  170.        .IFE                    ; END THE .IF CONDITION.
  171.  
  172.   ┴LSO NOTE THAT FOR MUCH OF THE PROGRAM WE WILL _NOT_ BE USING THE COMPUTER
  173.   ROUTINES AND INSTEAD BE DEVELOPING OUR OWN.
  174.  
  175.   ╔N ADDITION THE PROGRAM WILL SHOW YOU HOW TO USE ╔╥╤ INTERRUPTS TO SIMPLIFY
  176.   PROGRAMMING. ╫E WILL BE USING THEM TO PLAY MUSIC IN THE BACKGROUND ON THREE
  177.   VOICES (SOUND EFFECTS WILL TEMPORARILY PRE-EMPT THE THIRD VOICE FROM PLAYING). 
  178.   ┴LSO ANIMATION OF CHARACTERS WILL BE DONE VIA THE ╔╥╤. ┴ LITTLE BACKGROUND
  179.   ON INTERRUPTS FOR THOSE OF YOU WHO ARE A BIT HAZY ON WHAT THEY ARE OR HAVE
  180.   NEVER SEEN THEM BEFORE (┴LSO TRY TAKING A LOOK AT ╥ASTERS: ╫HAT THEY ARE AND
  181.   HOW TO USE THEM IN ├= ╚ACKING #3 - ╫HILE THIS DOES NOT NECESSARILY COVER
  182.   WHAT WE ARE GOING TO BE USING INTERRUPTS FOR IT DOES DESCRIBE THEM QUITE 
  183.   WELL.) ┬ASICALLY THE COMPUTER GENERATES AN INTERRUPT EVERY 1/60TH A SECOND
  184.   FROM A TIMER ON THE COMPUTER (USUALLY FROM THE ├╔┴ CHIP OR THE SCREEN FOR 
  185.   THOSE OF YOU WHO ARE CURIOUS). ╘HE COMPUTER WILL SAVE ALL THE REGISTERS, JUMP
  186.   TO A SUBROUTINE - PERFORM THE INSTRUCTIONS THERE (USUALLY UPDATING TIME,
  187.   SCANNING THE KEYBOARD ETC...) AND THEN RECALL ALL THE REGISTERS AND RETURN
  188.   TO THE USER PROGRAM. ╘HIS IS AN INTERRUPT. ┴N ╔╥╤ INTERRUPT DESCRIBES AN
  189.   INTERRUPT THAT WE CAN ALLOW TO BE "TURNED ON" AND "TURNED OFF" - IE: WE
  190.   CAN TEMPORARILY DISABLE IT IF WE HAVE TO. ┴ ╬═╔ INTERRUPT DESCRIBES AN
  191.   INTERRUPT WHICH WE CAN _NOT_ TEMPORARILY DISABLE -- WE WILL NOT BE USING
  192.   ╬═╔ INTERRUPTS IN THIS PROGRAM.
  193.  
  194.   
  195. ╔╔╔. ╘HE ╨ROCESS
  196.      -----------
  197.  
  198.   ╨ART OF WHAT THIS SERIES OF ARTICLES IS FOCUSED AT IS THE DEVELOPMENT OF BEING 
  199.   ABLE TO ANALYZE PROGRAMMING TASKS AND BREAK THEM DOWN INTO SMALLER WORKABLE
  200.   PROBLEMS. ╧NCE THESE PROBLEMS OR SUBROUTINES ARE COMPLETED YOUR ORIGINAL
  201.   PROBLEM IS SOLVED.
  202.  
  203.   ╠ET'S TAKE THIS APPROACH TO ╙PACE ╔NVASION:
  204.  
  205.   ╨ROBLEM ╙TATEMENT: ┬UILD A ╙PACE ╔NVADER PROGRAM CALLED ╙PACE ╔NVASION.
  206.   -----------------
  207.  
  208.   ╒SUALLY, GIVEN A PROBLEM YOU HAVE TO RE-WORK THE PROBLEM STATEMENT TO 
  209.   ENCOMPASS ALL OF WHAT YOU WANT. ╠ET'S TRY AGAIN:
  210.  
  211.   ╨ROBLEM ╙TATEMENT: ─EVELOP A ╙PACE ╔NVADER PROGRAM CALLED ╙PACE ╔NVASION
  212.   -----------------  UTILIZING THE 64 OR 128 SCREEN WITH INTERRUPT DRIVEN
  213.                      MUSIC / SOUND, AND ALLOWING INPUT FROM THE KEYBOARD, 
  214.                      JOYSTICK OR MOUSE.
  215.  
  216.   ╚MMM... ╘HE PROBLEM STATEMENT LISTED ABOVE IS BETTER BUT IT HAS NO REAL ORDER; 
  217.   WE HAVE NO CLEAR IDEA OF WHERE TO START AND WHAT WE NEED TO DO. ╔T DOES 
  218.   HOWEVER TELL US THAT WE HAVE THE FOLLOWING SECTIONS:
  219.  
  220.        - 64 / 128 ╙CREEN ╚ANDLING
  221.        - ═USIC / ╙OUND
  222.        - ╔NPUT ╚ANDLING
  223.        - ╟AME ─RIVER (IMPLIED)
  224.  
  225.   ╠ET'S THINK A BIT MORE ABOUT EACH OF THESE SECTIONS AND WHAT EACH WILL
  226.   INVOLVE:
  227.  
  228.   128 / 64 ╙CREEN ╚ANDLING:      - ╨UTTING CHARACTERS ON SCREEN.
  229.   ------------------------       - ╔NITIALIZING THE ╙CREEN / ╥EGISTERS.
  230.                                  - ╙ETTING UP THE ├USTOM ├HARACTERS.
  231.                                  - ╚ANDLING ANY ┴NIMATION.
  232.  
  233.   ═USIC / ╙OUND:                 - ╙ETTING UP THE ╙OUND ├HIP ╥EGISTERS.
  234.   -------------                  - ╨LAYING A NOTE READ FROM ═EMORY.
  235.                                  - ┼XECUTING A ╙OUND ┼FFECT.
  236.  
  237.   ╔NPUT ╚ANDLING:                - ─EVICE ╙ELECTION (KEYBOARD, MOUSE, JOYSTICK). 
  238.   --------------                 - ╦EYBOARD ╙CANNING.
  239.                                  - ═OUSE ╙CANNING.
  240.                                  - ╩OYSTICK ╙CANNING.
  241.  
  242.   ╟AME ─RIVER:                   - ╘ITLE ╙CREEN.
  243.   -----------                    - ╔NITIALIZATION OF ═EMORY.
  244.                                  - ╠EVEL ╙ETUP.
  245.                                  - ═OVEMENT OF ┴LIENS.
  246.                                  - ═OVEMENT OF ═ISSLES.
  247.                                  - ═OVEMENT OF ╨LAYER.
  248.                                  - ├OLLISION ├HECKING.
  249.                                  - ├OLLISION ╚ANDLING.
  250.                                  - ┼ND OF ╠EVEL.
  251.                                  - ╙CORE ╒PDATING.
  252.                                  - ┼ND - ╟AME HANDLING.
  253.                                  - ╚IGH ╙CORE ╒PDATE.
  254.  
  255.   ╙HREW! ╠ONG LIST 'EH? - ╬OW YOU MAY HAVE THOUGHT OF SOME NOT LISTED ABOVE,
  256.   AND WE MAY HAVE POSSIBLY OVERLOOKED SOME CRUCIAL ROUTINES -- THAT'S FINE --
  257.   THE ABOVE IS JUST INTENDED AS A BUILDING BLOCK - A PLACE TO START CODING FROM. 
  258.  
  259.   ╔F WE THINK OF THESE AS SUBROUTINES WE CAN BUILD A SKELETON OUTLINE OF THE 
  260.   PROGRAM - YET WE NEED SOME ORDER IN HOW WE CALL THEM. ╧BVIOUSLY WE AREN'T
  261.   GOING TO MOVE THE PLAYER UNTIL WE SCAN THE INPUT AND THAT REQUIRES PRIOR 
  262.   DEVICE SELECTION ETC... 
  263.  
  264.   ╚MM... ╘AKING ORDER INTO ACCOUNT WE CAN RE-STATE THE PROBLEM AS:
  265.  
  266.   ╨ROBLEM ╙TATEMENT: ─EVELOP A GAME SIMILAIR TO ╙PACE ╔NVADERS CALLED ╙PACE
  267.   -----------------  ╔NVASION BY INITIALIZING MEMORY, THE DISPLAY DEVICE,
  268.                      SETTING UP ├USTOM ├HARACTERS, SETTING UP THE ═USIC
  269.                      ╥EGISTERS AND DISPLAYING THE TITLE SCREEN. ╞ROM THERE,
  270.                      SELECT THE INPUT DEVICE AND AFTER THAT SETUP THE CURRENT
  271.                      LEVEL. ╬EXT, WHILE PLAYING MUSIC IN THE BACKGROUND AND
  272.                      SCANNING THE INPUT DEVICE, MOVE THE ALIENS, MISSLES AND
  273.                      PLAYER CHECKING FOR COLLISIONS AND TAKING APPROPRIATE
  274.                      ACTION AS REQUIRED (PLAYER DIES, SCORE INCREASES ETC OR
  275.                      WHAT-NOT). ┴FTER EACH LEVEL DISPLAY IF THE PLAYER IS DEAD,
  276.                      OR SET-UP FOR THE NEXT LEVEL AND REPEAT. ╫HEN THE GAME HAS
  277.                      ENDED UPDATE THE HIGH SCORE IF NECESSARY.
  278.  
  279.   ╘RY SAYING THAT FIVE TIMES REAL FAST! :-) ┬UT THAT PROBLEM STATEMENT IS A
  280.   WHOLE LOT BETTER THAN THE ONE WE HAD AT THE BEGINNING WHICH SIMPLY SAID TO 
  281.   DEVELOP A GAME.
  282.  
  283.  
  284. ╔╓. ╬OT ┴LL ┴T ╧NE ╘IME - ╫HAT ╫E'RE ─OING ╘HIS ╘IME
  285.     ------------------------------------------------
  286.  
  287.   ╬OW THIS PROGRAM IS TOO COMPLEX, (AS SEEN BY THE PROBLEM STATEMENT ABOVE) TO
  288.   HAVE IN ONE ARTICLE SO THIS ISSUE WE'LL CONCENTRATE ON THE BASIC MAIN LOOP
  289.   AND THE INITIALIZATION OF THE ├USTOM ├HARACTERS AND THE TITLE SCREEN. 
  290.  
  291.   ╧RIGINALLY, ╔ WAS PLANNING ON UPDATING AND LISTING THE REVISED CODE IN EACH
  292.   ISSUE. ╚OWEVER, DUE TO SPACE LIMITATIONS AND THE ENORMITY OF THE PROGRAM 
  293.   CURRENTLY (1,500+ LINES!!) IT WILL BE PLACED FOR ANONYMOUS FTP AT 
  294.   CCOSUN.CALTECH.EDU UNDER THE DIRECTORY: PUB/RKNOP/╚┴├╦╔╬╟.═┴╟.
  295.  
  296.  
  297. ╓. ╘HE ═AIN ╠OOP
  298.    -------------
  299.  
  300.   ╫HAT IS A MAIN LOOP? ┬ASICALLY IT'S WHERE EVERYTHING GETS DONE. ╔T CALLS OTHER 
  301.   SUBROUTINES AND KEEPS REPEATING UNTIL CERTAIN CRITERIA ARE MET - USUALLY WHEN
  302.   THE PLAYER REQUESTS TO EXIT THE GAME. ╚OWEVER, INSIDE YOU'LL FIND INNER LOOPS
  303.   FOR LEVEL PLAY ETC. 
  304.  
  305.   ╧UR MAIN LOOP FOR THIS PROGRAM WILL BE:
  306.  
  307. -------------------------------------------------------------------------------
  308. ;; * ═AIN ╠OOP - ╘HIS SHOULD BE THE LAST SECTION IN THE SOURCE CODE.
  309. ;
  310. ; ═AIN ╠OOP
  311. ;
  312.  
  313. MAIN'LOOP = *
  314.                JSR MEMORY'SETUP        ; ╙ET-╒P MEMORY.
  315.                JSR DISPLAY'SETUP       ;  "  "  DISPLAY.
  316.                JSR CHAR'SETUP          ;  "  "  CUSTOM CHARACTER DISPLAY.
  317.                JSR MUSIC'SETUP         ;  "  "  MUSIC CHIP.
  318.                JSR TITLE'SCREEN        ; ─ISPLAY THE TITLE SCREEN.
  319.                JSR SELECT'INPUT        ; ╙ELECT ╔NPUT ─EVICE.
  320.  
  321. LEVEL'LOOP = *
  322.                JSR PLAY'MUSIC          ; ╙TART THE MUSIC PLAYING.
  323.                JSR SETUP'LEVEL         ; ╙ETUP THE CURRENT LEVEL.
  324.  
  325.              - JSR ALIEN'MOVE          ; ═OVE ALIENS
  326.                JSR MISSLE'MOVE         ;  "   MISSLES
  327.                JSR PLAYER'MOVE         ;  "   PLAYER
  328.                JSR CHECK'COLLISION     ; ├HECK FOR COLLISIONS
  329.                LDX COLLISION'FLAG      ; ├HECK COLLISION FLAG.
  330.                BEQ -
  331.  
  332.                DEX                     ; ─ECREASE .╪ BY 1 SO IF ╪ WAS 1 THEN
  333.                BEQ PLAYER'DIE          ;    IT'S NOW 0 SO WE KNOW PLAYER DIED.
  334.                DEX                     ; ─ECREASE .╪ AGAIN SO IF ╪ WAS 2 THEN
  335.                BEQ ALIEN'DIE'SOUND     ;    IT'S NOW 0 SO WE MAKE ALIEN DEATH.
  336.                JSR END'LEVEL           ; ╔F WE GOT HERE - THAN END OF LEVEL.
  337.                JSR WAIT'NEXT           ; ╫AIT FOR NEXT KEYPRESS.
  338.                JSR INCREASE'LEVEL      ; INCREASE LEVEL #.
  339.                SEC                     ; ┴ND GO BACK....
  340.                BCS LEVEL'LOOP             
  341.  
  342. ALIEN'DIE'SOUND = *
  343.                JSR MAKE'ALIEN'SOUND    ; MAKE ALIEN SOUND.
  344.                SEC                     ; SET CARRY 
  345.                BCS -                   ; AND JUMP BACK.
  346.  
  347. PLAYER'DIE     JSR SHOW'PLAYER'DIE     ; ╙HOW IT ON-SCREEN.
  348.                LDA LIVES               ; ├HECK # OF LIVES.
  349.                BEQ END'OF'GAME         ; ╔F 0 THE END-OF-GAME.
  350.                BNE LEVEL'LOOP          ; GO BACK AND RE-START LEVEL.
  351.                BRK                     ; ╔F WE GET HERE - THAN AN ERROR.
  352.  
  353. END'OF'GAME    JSR END'GAME'SCREEN     ; ╙HOW END-OF-GAME SCREEN.
  354.                JSR HIGH'SCORE'UPDATE   ; ╒PDATE THE HIGH SCORE IF NEED-BE.
  355.                JSR WAIT'NEXT           ; ╫AIT FOR NEXT-GAME SELECTION.
  356.                LDA QUIT
  357.                BEQ +
  358.                JSR SETUP'LEVEL'1       ; ╙ET-╒P FIRST LEVEL.
  359.                SEC
  360.                BCS LEVEL'LOOP          ; AND START PLAYING IT.
  361.  
  362.              + JMP QUIT'GAME
  363. ;
  364. ; ┼ND OF ═AIN ╠OOP
  365. ;
  366. -------------------------------------------------------------------------------
  367.  
  368.   ╙OME OF THE ROUTINES LISTED ABOVE WE WILL LATER REPLACE WITH ACTUAL CODE. ╔T'S 
  369.   MUCH EASIER TO SEE:
  370.  
  371.                INC LEVEL 
  372.  
  373.   THAN TO SEE A 
  374.  
  375.                JSR INCREASE'LEVEL
  376.  
  377.   AND TRY TO HUNT DOWN THE CODE. ╔'VE INCLUDED THEM IN FOR NOW SO THAT WE CAN
  378.   HAVE A BETTER IDEA OF WHAT IS GOING ON.
  379.  
  380.   ╔N THE FILE: INVASION.SRC MOST OF THE STATEMENTS ABOVE ARE COMMENTED OUT. 
  381.   ╧NCE WE WRITE THE ROUTINES WE'LL UN-COMMENT THEM. ╞OR NOW, THIS SERVES TO
  382.   STILL REMIND US OF THE ROUTINES WE NEED TO WRITE.
  383.  
  384.   ┴LSO THERE ARE A COUPLE OF PROGRAMMING TRICKS THAT ╔ USED IN THE MAIN LOOP 
  385.   THAT PROBABLY NEED SOME CLARIFYING.
  386.  
  387.   ╫HEN HANDLING THE COLLISIONS THE .╪ REGISTER IS LOADED WITH THE RESULT OF THE
  388.   COLLISION CHECKING - $00 = NO COLLISIONS, $01 = PLAYER DIED, $02 = ALIEN DIED, 
  389.   $03 = END OF LEVEL. ┴NYTIME A LOAD TO A REGISTER IS DONE THE FLAGS ARE 
  390.   AUTOMATICALLY SET AS IF YOU HAD COMPARED IT TO 0 - HENCE WE CAN LDX THE 
  391.   COLLISION FLAG AND IMMEDIATELY BRANCH IF EQUAL TO ZERO FOR NO COLLISIONS. ╔N
  392.   ADDITION TO THE LOAD ANYTIME THE .╪ OR .┘ REGISTERS ARE INCREMENTED OR 
  393.   DECREMENTED AN IMPLICIT COMPARISON TO ZERO IS PERFORMED. ╙O IF THE .╪ REGISTER 
  394.   IS 1 PREVIOUSLY, WE DECREMENT IT THEN IT WILL BE ZERO AND OUR ┬┼╤ INSTRUCTION
  395.   WILL BRANCH. ╔F IT'S TWO THEN IT WILL BE ONE AND WE CAN CONTINUE LIKE THIS.
  396.     [╬╧╘┼: ╘ECHNICALLY IT'S NOT A REAL COMPARISON TO ZERO BUT CALLING IT A
  397.     COMPARISON TO ZERO SERVERS OUR PURPOSE HERE. ╘HE ONLY SIGNIFICANT DIFFERENCE 
  398.     WOULD BE IN THE EFFECT OF THE CARRY FLAG WHICH IS INSIGNIFICANT IN OUR 
  399.     CODE SEGMENT HERE.]
  400.  
  401.   ┴LSO IN SEVERAL LOCATIONS ARE THE TWO INSTRUCTIONS:
  402.  
  403.                SEC
  404.                BCS [LABEL]
  405.  
  406.   ╫HAT THESE ARE DOING ARE SIMPLY PROGRAMMING STYLE - THEY COULD BE SUBSTITUTED
  407.   WITH ╩═╨ [LABEL] - HOWEVER THEY OFFER ADVANTAGES OVER ╩═╨.  ╘HEY TAKE UP THE
  408.   A LARGER AMOUNT OF EXECUTION TIME, HOWEVER THEY ARE RELOCATABLE SO ANY MUCKING 
  409.   AROUND / MOVING SECTIONS OF CODE DURING DEBUGGING WILL BE LESS LIKELY TO
  410.   CRASH. ╒SING OTHER FLAGS ARE ALSO VALID -- THE USE OF WHICH FLAG (╔ PREFER
  411.   THE CARRY FLAG) IS USUALLY DEPENDENT ON THE PROGRAMMER. ╟EOS DEFINES A
  412.   SIMILAIR MACRO CALLED ┬╥┴ (BRANCH ALWAYS) WHICH IS EQUIVLENT TO:
  413.  
  414.                CLV
  415.                BVC [LABEL]
  416.   
  417.   ╬OTE THAT THE ABOVE IS JUST PROGRAMMING STYLE, HELD OVER FROM MY PROGRAMMING
  418.   IN ASSEMBLY DAYS. ╘HE USE OF ╩═╨ IS PROBABLY PREFERABLE IN TERMS OF 
  419.   EXECUTION AND ALSO IN BEING ABLE TO BRANCH MORE THAN 127 BYTES AWAY (THE 
  420.   BRANCH INSTRUCTIONS ONLY HAVE A RANGE OF +128/-127).
  421.  
  422.  
  423. ╓╔. ├USTOM ├HARACTERS
  424.     -----------------
  425.  
  426.   ╙INCE WE'RE WRITING FOR EACH OF THE SEPERATE MODES (64 MODE, 128 MODE) WE HAVE 
  427.   TO TAKE A LOOK AT THE DIFFERENCES BETWEEN THE ╓╔├ CHIP (64 MODE) AND THE 8563
  428.   CHIP IN THE 128.  
  429.  
  430.   ╘HE ╓IC-├HIP
  431.   ------------
  432.   ╘HE CHARACTER SETS IN THE ╓╔├ CHIP ARE DEFINED AS IN THE EXAMPLE BELOW OF 
  433.   THE CHARACTER CODE $00 "@" (ALL REFERENCES ARE TO SCREEN "POKE" CODES - NOT
  434.   PRINT CODES).
  435.  
  436.          .BYT #%00111100    ╘RY HOLDING THE PAGE (OR MOVING AWAY FROM THE
  437.          .BYT #%01100110    SCREEN) AND TAKING A LOOK AT THE PATTERNS THE 1'S
  438.          .BYT #%01101110    AND 0'S MAKE. ┼ACH CHARACTER IS THUS DEFINED AS 
  439.          .BYT #%01101110    EIGHT BYTES WHO'S BIT PATTERNS DEFINE IT.  ╚AVING A
  440.          .BYT #%01100000    TOTAL OF 256 CHARACTERS AVAILABLE MAKES IT
  441.          .BYT #%01100010    NECCESARY TO SET ASIDE A TOTAL OF 2,048 BYTES. 
  442.          .BYT #%00111100
  443.          .BYT #%00000000
  444.  
  445.   ╬OW, INSTEAD OF DESIGNING ALL 256 CHARACTER SETS WE'LL JUST TAKE ADVANTAGE OF
  446.   THE FACT THAT THE LETTERS AND NUMBERS WE WANT WILL ALREADY BE THERE -- WE'LL
  447.   JUST COPY THEM FROM THE ╥╧═ SET INTO ╥┴═, MODIFY SOME OF THE OTHER CHARACTERS
  448.   TO REFLECT WHAT WE WANT AND THEN TELL THE ╓╔├ CHIP TO LOOK AT ╥┴═ TO GET THE
  449.   CHARACTER SET DEFINITIONS.
  450.  
  451.   ╘HERE ARE SOME PROBLEMS WITH COPYING THE 'SYSTEM' CHARACTERS, HOWEVER. ╘HE
  452.   ├OMMODORE 64 USUALLY MASKS OUT THE CHARACTER SET AND TYPICALLY IT IS ONLY
  453.   AVAILABLE TO THE ╓╔├ CHIP SO THAT MORE SPACE CAN BE PRESENT FOR USER PROGRAMS
  454.   AND SUCH.  ╔T ALSO TAKES UP THE SECTION OF MEMORY THAT THE ╔/╧ BLOCK IN 
  455.   $D000-$DFFF DOES SO THAT SWITCHING IT IN WHILE INTERRUPTS ARE ENABLED IS SURE
  456.   TO RESULT IN A CRASH. 
  457.  
  458.   ╫E'RE ALSO GOING TO BE DOING A FEW THINGS THAT YOU MAY NOT EXPECT -- INSTEAD
  459.   OF COPYING ALL 256 CHARACTERS - WE'RE GONNA _JUST_ COPY THE FIRST 128. ╘HIS
  460.   WILL GIVE US ALL OF THE NORMAL CHARACTERS AS THE LAST 128 ARE THE REVERSE-
  461.   VIDEO COUNTERPARTS TO THE FIRST 128 CHARACTERS. ╫E'RE DOING THIS TO CONSERVE
  462.   SPACE AND BECAUSE WE REALLY DON'T NEED THAT MANY CHARACTERS DEFINED.
  463.  
  464.   ┴LSO LOCATION $01 CONTAINS WHAT $D000-$DFFF HOLDS AND WE WILL HAVE TO MODIFY
  465.   BIT 2 TO SWITCH THE CHARACTER ╥╧═ IN. ╚ENCE, THE FOLLOWING PROGRAM CODE IS
  466.   USED TO COPY THE CHARACTER SET:
  467.  
  468. -------------------------------------------------------------------------------
  469. COPY'CHARS = *                 ; MUST BE RUN W/ INTERRUPTS DISABLED
  470.                LDA $01         ; REGISTER 1 = THE CONTROL TO SWITCH IN THE CHAR. 
  471.                                ; ROM.
  472.                PHA             ; SAVE IT AS WE'LL LATER NEED TO STA' IT BACK.
  473.                AND #%11111011  ; ┬IT 2 CONTROLS IT - CLEAR IT TO SWITCH IT IN.
  474.                STA $01         ; AND MAKE IT SO WE CAN READ IT IN.
  475.                LDA #>$3000     ; MOVE CHARS TO $3000
  476.                STA DEST+1
  477.                LDA #>$D800     ; FROM $D800 (START OF CHAR SET) (LOWER-CASE)
  478.                STA SRC+1
  479.                LDY #$00        ; LO-BYTES OF BOTH SRC, DEST = $00.
  480.                STY SRC
  481.                STY DEST
  482.                LDX #$10        ; COPY 2K OF DATA.
  483.              - LDA (SRC),Y     ; COPY BYTE.
  484.                STA (DEST),Y
  485.                INY
  486.                BNE -           ; CONTINUE UNTIL .┘ = 0.
  487.                INC SRC+1       ; INCREASE SOURCE & DEST BY 256
  488.                INC DEST+1
  489.                DEX             ; DECREASE .╪ COUNT.
  490.                BNE -           ; IF NON-ZERO THEN CONTINUE COPYING, ELSE
  491.                PLA             ; RESTORE VALUE OF $01 
  492.                STA $01         ; AND PUT BACK.
  493.                LDA $D018       ; SET ╓╔├-CHIP ADDRESS.
  494.                AND #$F1        ; TO SHOW CHAR SET.
  495.                ORA #$0C       
  496.                STA $D018       ; AND FINALLY TELL ╓╔├ WHERE THE CHAR SET IS...
  497.                RTS             ; AND RETURN.
  498. -------------------------------------------------------------------------------
  499.   
  500.   ╬OTE THAT WE STILL NEED TO CHANGE THE ACTUAL CHARACTERS WE'RE GONNA BE USING.
  501.   ╘HAT WILL BE HANDLED IN THE SECTION AFTER NEXT: ├HANGING THE ├HARACTERS AS 
  502.   THERE IS A GREAT DEAL OF SIMILARITY BETWEEN THE 128 AND 64 IMPLEMENTATIONS.
  503.  
  504.   ╘HE 8563 ├HIP
  505.   -------------
  506.   ╘HE 8563 80-├OLUMN CHIP USUALLY HAS 16K OR 64K ╥AM ATTATCHED TO THE CHIP 
  507.   WHICH THE ├╨╒ DOES NOT HAVE DIRECT CONTROL OVER. ╔T HAS TO DIRECT THE 8563 
  508.   TO STORE AND RETRIEVE VALUES TO THAT MEMORY. ╫HAT MAKES CONTROL OVER THAT 
  509.   MEMORY ALL THE MORE DIFFICULT IS THE FACT THAT THE 8563 ONLY HAS TWO LINES
  510.   OR ADDRESSES THAT THE ├╨╒ CAN CONTROL.  
  511.  
  512.   ╘HE 8563 HAS A CHARACTER SET IN MUCH THE SAME WAY THE ╓╔├ CHIP DOES, SAVE
  513.   ONE EXCEPTION - EACH CHARACTER SET CAN HAVE UP TO 16 LINES. ╬ORMALLY, THE LAST 
  514.   EIGHT LINES ARE FILLED WITH $00 AND ARE NOT SHOWN. (╨ROVISIONS CAN BE MADE TO
  515.   HAVE 8X16 CHARACTERS BUT IT IS NOT NEEDED FOR THIS GAME AND THUS, WILL NOT BE
  516.   SHOWN - ╞OR MORE INFORMATION ╙EE ├= ╚ACKING ╔SSUE #2: 8563: ┴N ╔N-─EPTH ╠OOK.) 
  517.   ╘HUS THE ALGORITHIM IS SIMILAIR TO THE ├=64 BUT 8 ZERO-BYTES WILL NEED TO BE
  518.   WRITTEN AT THE END OF EVERY EIGHT BYTES READ.
  519.  
  520.   ╚OWEVER, THE 8563 DOES MAKE THINGS EASIER FOR US! - ╫HEN THE COMPUTER IS FIRST 
  521.   TURNED ON A COPY OF THE ├HARACTER ╙ET FROM ╥╧═ IS COPIED INTO THE 8563. ╘HE
  522.   8563 HAS NO ╥╧═ ├HARACTER ╙ET ASSOCIATED WITH IT AND THUS WE ARE ABLE TO JUST
  523.   SIMPLY MODIFY THE CHARACTER SET THAT IS IN THE 8563 MEMORY INSTEAD OF COPYING
  524.   IT OVER.  ┬ECAUSE OF THIS NO ROUTINE WILL BE PRESENTED TO COPY A CHARACTER
  525.   SET INTO THE 8563 MEMORY, RATHER THE DISCUSSION OF COPYING INDIVIDUALLY 
  526.   DEFINED CHARACTERS WILL TAKE PLACE IN THE NEXT SECTION. ╘HE ├=128 ALSO MAKES
  527.   LIFE EVEN EASIER FOR US AT THE END WHEN WE WILL EXIT THE PROGRAM, 
  528.   MODIFYING THE CHARACTER SET BACK TO THE "STANDARD" ├OMMODORE CHARACTER SET
  529.   BY A ROUTINE IN THE ╦┼╥╬┴╠ THAT WILL COPY THE CHARACTERS BACK. ╫E'LL TAKE A
  530.   LOOK AT IT CLOSER WHEN WE WRITE THE EXIT ROUTINE.
  531.  
  532.   ┴LSO NOTE THAT SINCE THE 8563 CHIP SUPPORTS THE 80 COLUMN SCREEN WE WILL
  533.   BE DEFINING TWO CHARACTERS THAT CAN BE PLACED SIDE BY SIDE FOR EACH ALIEN
  534.   SO THAT THE PLAYING FIELD WILL BE SIMILAIR TO THE ├64 VERSION. ╚OWEVER, FOR
  535.   THE TITLE SCREEN WE WILL BE SWITCHING THE 8563 INTO A "40 COLUMN" MODE
  536.   TO MAKE PROGRAMMING EASIER, IN ADDITION TO EXPANDING THE CHARACTER BIT-MAPPED
  537.   LOGO.
  538.   
  539.   ├HANGING THE ├HARACTERS
  540.   -----------------------
  541.   ┴ LOT OF THE TIMES YOU'LL FIND YOURSELF RE-USING SUBROUTINES AND CODE THAT
  542.   YOU HAVE PREVIOUSLY CREATED, GRADUALLY, OVER A PERIOD OF TIME BUILDING UP
  543.   A LIBRARY OF ROUTINES. ╫HEN THINKING THROUGH THE PURPOSE AND INTENT OF THIS
  544.   ROUTINE ╔ THOUGHT ABOUT POSSIBLY BUILDING IT SO IT WOULD READ A TABLE AND
  545.   CHANGE THE CHARACTER SET BASED ON THAT TABLE. ╘HE 64/128 CHARACTER SETS
  546.   WOULD BE THE SAME - THIS ROUTINE WOULD AUTOMATICALLY GENERATE THE EIGHT 
  547.   ADDITIONAL BYTES NEEDED BY THE 8563 IF NEED-BE AND IT WOULD CALL THE 
  548.   APPROPRIATE STORAGE ROUTINE - STORE TO EITHER THE 8563 OR THE COMPUTER
  549.   MEMORY. 
  550.  
  551.   ╬OW YOU MAY BE ASKING WHY WOULD YOU WANT TO STORE TO THE COMPUTER MEMORY
  552.   IN 128 MODE? ╫HY NOT JUST HAVE TWO SEPERATE VERSIONS? - ┘ES - THAT COULD
  553.   BE POSSIBLE BUT ╔'M IMPLEMENTING IT THIS WAY BECAUSE IN THE FUTURE ╔ MAY
  554.   SEE A NEED TO DEFINE CUSTOM CHARACTERS IN 128 MODE FOR THE 40 COLUMN SCREEN.
  555.   ╘HIS WAY ╔ CAN JUST EXTRACT THE ROUTINE, POP IT INTO MY PROGRAM AND ╔'VE GOT
  556.   THAT SECTION OF THE CODE COMPLETE. 
  557.  
  558.   ╘HIS IS WHAT ╔ WAS THINKING OF FOR THE DATA TABLE:
  559.  
  560.       .BYT 1 = 8563, 0 = COMP. MEMORY.
  561.       .WORD ADDRESS ; ADDRESS BASE OF CHAR-SET IN COMPUTER OR 8563 MEMORY.
  562.       .BYTE CHAR #  ; (TO START)
  563.       .BYTE # OF CHARS TO DEFINE
  564.       .BYTE # OF CHARACTERS TO DEFINE
  565.       .BYTE DATA,DATA,....,DATA8 ; CHARACTER DATA.
  566.       .BYTE DATA,DATA,....,DATA8 ; CHARACTER DATA. ETC....
  567.       . . .
  568.    
  569.   ┼NTRANCE INTO THE ROUTINE WILL CONSIST OF .┴┘ HOLDING THE LOCATION OF THE 
  570.   TABLE.  ╫E WILL KEEP THE ADDRESS OF THE TABLE AND KEEP INCREMENTING IT AS
  571.   WE GO ALONG IN Z-PAGE LOCATIONS.
  572.  
  573. -------------------------------------------------------------------------------
  574.        INSTALL'CHAR = *
  575.                STA ZP1                 ; SAVE .AY IN TABLE ADDRESS
  576.                STY ZP1+1
  577.                LDY #$00                ; READ COMPUTER MODE.
  578.                JSR GET'BYTE
  579.                STA MODE
  580.                JSR GET'BYTE            ; GET ADDRESS BASE.
  581.                STA ADR
  582.                JSR GET'BYTE
  583.                STA ADR+1
  584.                JSR GET'BYTE            ; GET NUMBER OF CHARACTERS TO COPY.
  585.                STA NUMB            
  586.                JSR GET'BYTE            ; GET NEXT CHARACTER #.  
  587.                STA WRK                 ; SAVE IN TEMP. LOCATION.
  588.                LDA #$00
  589.                STA WRK+1
  590.                ASL WRK                 ; SHIFT LEFT X3 TIMES = *8
  591.                ROL WRK+1
  592.                ASL WRK
  593.                ROL WRK+1
  594.                ASL WRK
  595.                ROL WRK+1
  596.                LDA MODE                ; IF FOR 8563 THEN MULTIPLY 1 MORE TIME.
  597.                BEQ +      
  598.                ASL WRK
  599.                ROL WRK+1
  600.              + LDA ADR                 ; ADD CHARACTER ADDRESS IN.
  601.                CLC
  602.                ADC WRK
  603.                STA WRK
  604.                LDA ADR+1
  605.                ADC WRK+1
  606.                STA WRK+1               ; ADDRESS NOW CALCULATED
  607.                JSR SETADRS             ; SET ADDRESS IN PROPER CHIP
  608.   LOOP'INSTALL LDX #$08                ; COPY 8 BYTES.
  609.              - JSR GET'BYTE
  610.                JSR WRITEBYTE           ; WRITE OUT BYTE.
  611.                DEX
  612.                BNE -
  613.                LDA MODE                ; IF 128 THEN FILL OUT 8 MORE $00 BYTES.
  614.                BEQ +
  615.                LDA #$00
  616.                LDX #$08
  617.              - JSR WRITEBYTE
  618.                DEX
  619.                BNE -
  620.              + DEC NUMB
  621.                BNE LOOP'INSTALL
  622.                RTS       
  623. -------------------------------------------------------------------------------
  624.  
  625.   ╫HAT? ╫E HAVE THRE SUBROUTINES : WRITEBYTE, SETADRS, AND GET'BYTE THAT WE
  626.   HAVEN'T EXAMINED YET. ╘HESE ARE GOING TO BE THE ROUTINES THAT ARE DEPENDANT
  627.   ON THE COMPUTER TYPE. ┴LSO, WRITEBYTE WILL REQUIRE THAT .╪┘ NOT BE DISTURBED;
  628.   SETADRS REQUIRES THAT .┘ NOT BE DISTURBED HENCE THE FOLLOWING:
  629.  
  630. -------------------------------------------------------------------------------
  631.        SETADRS TYA             ; SAVE .YX
  632.                PHA
  633.                TXA
  634.                PHA
  635.                LDA MODE        ; CHECK COMPUTER TYPE.
  636.                BEQ +           ; IF ├=64, THEN JUMP AHEAD.
  637.                LDX #18         ; ╓─├ REGISTER - CURRENT MEMORY ADDRESS HI
  638.                LDA WRK+1       ; GET ADDRESS HI
  639.                JSR WR'VDC
  640.                LDX #19         ; ╓─├ REGISTER - CURRENT MEMORY ADDRESS LO
  641.                LDA WRK         ; GET ADDRESS LO
  642.                JSR WR'VDC
  643.              + PLA             ; RESTORE .╪┘
  644.                TAX
  645.                PLA
  646.                TAY
  647.                RTS             ; AND RETURN.
  648. -------------------------------------------------------------------------------
  649.   
  650.   ╬OTE THAT WE REALLY DON'T NEED A SETADRS FOR THE ├=64 -- WE CAN JUST INDEX 
  651.   OFF (WRK) IN THE WRITEBYTE ROUTINE WHICH FOLLOWS:
  652.  
  653. -------------------------------------------------------------------------------
  654.   WRITEBYTE    STA TEMP        ; SAVE AS WE NEED IT LATER.
  655.                TXA             ; ╙AVE .╪┘
  656.                PHA
  657.                TYA
  658.                PHA
  659.                LDA MODE        ; NOW CHECK COMPUTER TYPE.
  660.                BEQ +           ; IF C64 JUMP AHEAD
  661.                LDA TEMP        ; RECALL TEMP.
  662.                JSR WR'VRAM 
  663.                SEC
  664.                BCS ++          ; JUMP AHEAD
  665.              + LDY #$00        ; ├64 / Y-INDEX = $00
  666.                LDA TEMP        ; GET VALUE
  667.                STA (WRK),Y     ; STORE
  668.                INC WRK         ; NOW INCREASE ADDRESS
  669.                BNE +
  670.                INC WRK+1
  671.              + PLA             ; NOW RETURN AFTER RECALLING .╪┘
  672.                TAY
  673.                PLA
  674.                TAX
  675.                RTS             ; AND RETURN.
  676. -------------------------------------------------------------------------------
  677.  
  678.   ╬OTE THAT THE FOLLOWING ROUTINE IS FAIRLY SHORT BUT IT IS CALLED NUMEROUS
  679.   TIMES WITHIN THE ROUTINES THAT USE DATA TABLES SUCH AS INSTALL'CHAR, 
  680.   WRITE'TXT AND WRITE'COL. 
  681.  
  682. -------------------------------------------------------------------------------
  683.   GET'BYTE = *
  684.                LDA (ZP1),Y
  685.                INY
  686.                BNE +           ; IF ZERO THEN INCREASE ZP1 HI
  687.                INC ZP1+1
  688.              + RTS
  689. -------------------------------------------------------------------------------
  690.  
  691.   ╬OT BAD 'EH?  ┴ QUICK NOTE: ╘HE INSTRUCTIONS: ╨╠┴, ╘┴┘, ╨╠┴, ╘┴╪, ╨╚┴, ETC.. 
  692.   ARE ROUTINES THAT ╨USH OR ╨ULL (PHA,PLA) THE .┴ ONTO THE STACK. ╘HE ╘┴┘, ╘┴╪,
  693.   ╘╪┴, ╘┘┴ ARE INSTRUCTIONS THAT TRANSFER A REGISTER TO ANOTHER (IE: THE ╘┴┘
  694.   TRANSFERS THE ┴ REGISTER TO .┘, ╘╪┴ TRANSFERS .╪ TO .┴ ETC...) ┬Y USING THE
  695.   COMBINATION OF THESE WITH THE STACK WE CAN SAVE THE REGISTERS AND LATER
  696.   RE-CALL THEM SO THAT THEY ARE THE SAME WHEN WE ENTERED THE ROUTINE. ╘HE
  697.   STACK IS USUALLY A "MYSTERY" ITEM TO NEW PROGRAMMERS OF THE 6502 SERIES. 
  698.   ┬ASICALLY IT'S JUST LIKE ANY OTHER STACKS IN THE REAL WORLD - THE LAST ITEM
  699.   THROWN (╔'M NON-PRACTICING PERFECTIONIST SO ╔ THROW STUFF.. ;-) ) OR PUSHED
  700.   ON THE STACK WILL THE FIRST ITEM REMOVED OR PULLED FROM THE STACK. ╞OR 
  701.   EXAMPLE ╔'VE GOT A STACK OF BOOKS SITTING NEAR ME :
  702.  
  703.                ═APPING THE ├OMMODORE 128
  704.                128 ╔NTERNALS
  705.  
  706.   AND ╔'M HOLDING ═APPING THE ├OMMODORE 64 IN MY HANDS. ╔F ╔ PUSH (OR TOSS)
  707.   THE BOOK ONTO THE STACK (AND HOPEFULLY HIT THE STACK INSTEAD OF THE FLOOR)
  708.   ╔'LL HAVE THE FOLLOWING STACK:
  709.  
  710.                ═APPING THE ├OMMODORE 64
  711.                ═APPING THE ├OMMODORE 128
  712.                128 ╔NTERNALS
  713.  
  714.   AND IT SHOULD BE EASY TO SEE THAT IF ╔ "PULL" THE NEXT BOOK OFF THE STACK
  715.   THAT ╔'LL GET THE ═APPING THE ├OMMODORE 64 BOOK. ╘HE NEXT BOOK TO BE "PULL"ED
  716.   AFTER THAT WOULD BE THE ═APPING THE ├OMMODORE 128 BOOK. ╘HIS IDEA CAN BE
  717.   APPLIED TO THE 6502 STACK -- ╔T WILL KEEP STORING VALUES (UP TO 256) WHEN YOU
  718.   "PUSH" THEM ON (VIA THE ╨╚┴ INSTRUCTION) AND WILL RETRIEVE THE LAST VALUE
  719.   STORED WHEN YOU "PULL" THEM OFF (VIA THE ╨╠┴ INSTRUCTION). ┴NOTHER ╨╠┴
  720.   INSTRUCTION WOULD RETURN THE NEXT VALUE THAT HAD BEEN STORED.
  721.  
  722.   ╘HE ├HARACTER ┬ITMAPS
  723.   ---------------------
  724.  
  725.   ╨ASI ╧JALA IS TO BE CREDITED WITH ALL THE GRAPHICS AND MANY THANKS GO OUT
  726.   TO HIM.
  727.  
  728.   ╘HE GAME LOGO IS MADE UP OF 120 CUSTOM DEFINED CHARACTERS THAT WILL BE 
  729.   PRINTED IN THE FOLLOWING MANNER (ON THE 128 SCREEN THEY WILL BE CENTERED).
  730.  
  731.   (IN REVERSE VIDEO)...
  732.  
  733.            ┴┬├─┼╞╟╚ . . . [UP TO 40 CHARACTERS]
  734.            ╔╩╦╠═╬╧╨
  735.            ╤╥╙╘╒╓╫╪    
  736.  
  737.   AND EVERYTHING WILL LINE UP.
  738.  
  739.   ╙O THAT IT WILL LOOK LIKE A "MINI-BITMAP".  ╫E COULD HAVE USED BITMAP MODE
  740.   AND MADE A VERY NICE LOOKING TITLE SCREEN BUT THAT WOULD HAVE INVOLVED 
  741.   SWITCHING AND ALLOCATING MEMORY FOR THE BITMAP, ETC . . . ╧N BOTH THE
  742.   8563 AND THE ╓╔├ THAT INVOLVES A BIT MORE WORK AND SO CUSTOM CHARACTERS
  743.   WILL BE USED FOR THE TITLE SCREEN. ╘HE REGULAR LETTER AND NUMERIC CHARACTERS
  744.   WILL BE AVAILABLE SO THAT WE CAN DISPLAY CREDITS AND GAME INSTRUCTIONS
  745.   BELOW THE LOGO.
  746.  
  747.   ╬OW - IN THE PROGRAM LISTING WE COULD LIST THEM AS BINARY #'S AND THAT WOULD
  748.   MAKE EDITING THEM VERY EASY BUT WE'RE GONNA USE THEIR DECIMAL REPRESENTATION
  749.   IN THE PROGRAM LISTING.
  750.  
  751.   ╘HE CHARACTERS ARE DEFINED SIMILAIR TO THE LOGO EXCEPT THEY ARE TREATED AS
  752.   SINGLE CHARACTERS. ╔N THE 128 VERSION DUE TO THE 80 COLUMN SCREEN WE ARE
  753.   GOING TO USE TWO CHARACTERS SIDE BY SIDE TO SIMULATE ONE ALIEN SO THAT THE
  754.   PLAYING FIELD WILL BE SIMILAIR TO THE ├64 VERSION. ╔N ADDATION, DURING THE
  755.   MAIN LOOP WE WILL MODIFY THE CHARACTER SETS TO SUPPORT ANIMATION OF THE 
  756.   ALIENS. ╔N THE DATA LISTING THERE IS A REFERENCE TO "FRAMES" - FOR EACH OF
  757.   THE ALIENS THERE ARE 8 DIFFERANT FRAMES.
  758.  
  759.   ╧H! - ╘HERE WILL BE MORE CHARACTERS DEFINED IN THE FUTURE. ╥IGHT NOW ╔'M 
  760.   MAINLY INTERESTED IN GETTING SOME BASE CHARACTERS DOWN SO YOU CAN SEE HOW
  761.   CUSTOM CHARACTERS ARE IMPLEMENTED.  ╫HEN WE START SETTING UP DIFFERENT LEVELS
  762.   AND SUCH WE'LL ADD MORE CHARACTERS THEN. ├URRENTLY THE CUSTOM CHARACTERS
  763.   ARE NOT USED - ONLY THE CHARACTERS FOR THE LOGO. ╞OR THOSE OF YOU WHO ARE
  764.   CURIOUS TRY INSTALLING THE CHARACTERS VIA INSTALL'CHAR AND TAKING A LOOK
  765.   AT THE ALIENS.
  766.  
  767.  
  768. ╓╔╔. ╘ITLE ╙CREEN
  769.      ------------
  770.  
  771.   ╘HE TITLE SCREEN IS USUALLY A LEAD-IN TO THE ACTUAL GAME AND IT'S AIM IS
  772.   TO TELL THE PLAYER HOW TO PLAY THE GAME, ANY AVAILABLE OPTIONS AND P'HAPS
  773.   PRESENT A NICE GRAPHIC OR TWO TO "WOW" THE USER INTO PLAYING. ╔N ADDATION,
  774.   THE MAIN MUSICAL THEME CAN BE INTRODUCED HERE TO UNIFY THE GAME-PLAYING.
  775.   ╘HE DISCUSSION BELOW DOES NOT TAKE INTO ACCOUNT COLOR BUT REST-ASSURED WE
  776.   WILL BE USING VARYING COLORS IN THE TITLE SCREEN. ╘HE FORMAT FOR THE COLOR
  777.   DATA WILL BE ALMOST IDENTICAL TO THE TITLE SCREEN FORMAT EXCEPT IT WILL
  778.   BE STRUCTURED VIA THE FOLLOWING:
  779.  
  780.        .WORD ADDRESS
  781.        .BYTE NUM_OF_CHARS TO PUT COLOR ($00= END OF DATA)
  782.        .BYTE COLOR_VALUE
  783.  
  784.   ╘HE ROUTINE (COLOR'TEXT) CAN BE FOUND IN THE SOURCE LISTINGS AT THE END OF
  785.   THIS ARTICLE. ┬ECAUSE OF THE SIMILARITY BETWEEN IT AND WRITE'TEXT IT IS
  786.   NOT DISCUSSED IN THIS ARTICLE.
  787.  
  788.   ╘ITLE ╙CREEN ┬ACK╟ROUND
  789.   -----------------------
  790.   ╘HE TITLE SCREEN ╔ ENVISONED AS A BORDERED SCREEN (USING THE NORMAL ├= 
  791.   CHARACTER SET - IE: ├= ┴,╙,┌,╪ ON THE KEYBOARD) WITH OUR BITMAP IN THE MIDDLE
  792.   AND UNDER-NEATH IT A SHORT DESCRIPTION OF THE GAME AND GAME-PLAY INSTRUCTIONS. 
  793.  
  794.   ╬OW THIS IS MY IDEA OF THE SCREEN LAYOUT (ROUGH DRAWING AS WE'RE NOT USING
  795.   THE ACTUAL SCREEN DIMENSIONS):
  796.  
  797.      +-------------------------------------------------------------+
  798.      ⁿ -╠╧╟╧ ----------------------------------------------------- ⁿ
  799.      ⁿ --------------X 3 LINES------------------------------------ ⁿ
  800.      ⁿ ----------------------------------------------------------- ⁿ
  801.      ⁿ                                                             ⁿ
  802.      ⁿ                   ╙PACE ╔NVASION ├64/128                    ⁿ
  803.      ⁿ                     ╨ROGRAMMING : ├RAIG ╘AYLOR              ⁿ
  804.      ⁿ                     ╟RAPHICS    : ╨ASI ╧JALA                ⁿ
  805.      ⁿ                     ╙OUND       : ????????????              ⁿ
  806.      ⁿ                                                             ⁿ
  807.      ⁿ ----------------------------------------------------------- ⁿ
  808. -- 
  809.  
  810. - ├RAIG ╘AYLOR   ⁿⁿ ╙TANDARD ─ISCLAIMER ┴PPLIES (OF COURSE!)
  811. DUCK@PEMBVAX1.PEMBROKE.EDU (╨EMBROKE ╙TATE ╒NIVERSITY)
  812.  
  813. ╧REGON, N.:
  814.         ┼IGHTY BILLION GALLONS OF WATER WITH NO PLACE TO GO ON ╙ATURDAY
  815.         NIGHT.
  816. ┼ND OF ╞ILE, ╨RESS ╥┼╘╒╥╬ TO QUIT
  817. ┴RTICLE #10122 (10178 IS LAST):
  818. ╞ROM: DUCK@PEMBVAX1.PEMBROKE.EDU
  819. ╬EWSGROUPS: COMP.SYS.CBM
  820. ╙UBJECT: ├= ╚ACKING ╔SSUE #4 2/5
  821. ─ATE: ═ON ╧CT  5 10:00:55 1992
  822.  
  823.      ⁿ ╘O ╨LAY:                                                    ⁿ
  824.      ⁿ    ╒SE JOYSTICK IN PORT 2, MOUSE IN PORT 1 OR KEYBOARD:     ⁿ
  825.      ⁿ            ┴ - ╠EFT, ┌ - ╥IGHT   ╙PACE - ╞IRE               ⁿ
  826.      ⁿ              ╞1 - ╥ESTART                                   ⁿ
  827.      ⁿ                                                             ⁿ
  828.      +-------------------------------------------------------------+
  829.  
  830.   ╘ITLE ╙CREEN ╞ORMATTING
  831.   -----------------------
  832.   ╫E COME INTO A PROBLEM HERE -- THE SCREEN IS SOME 1000 CHARACTERS ON THE ├64,
  833.   AND 2000 CHARACTERS FOR THE ├=128.  ╔T WOULD BE EXTREMELY WASTEFUL TO STORE
  834.   THAT MANY CHARACTERS IN MEMORY JUST TO REPRODUCE A TITLE SCREEN - AND MOST OF
  835.   THEM CONSISTING OF SPACES AT THAT!!  
  836.  
  837.   ╫HAT WE'LL DO IS TO JUST SPECIFY THE ADDRESS ON SCREEN, THE # OF CHARACTERS
  838.   AND THEN LIST THE CHARACTERS. ╔T WILL BE SIMILAIR TO OUR CUSTOM CHARACTER
  839.   TABLE DRIVER ABOVE BUT WILL BE DIFFERENT ENOUGH THAT A NEW ROUTINE IS 
  840.   WARRENTED. ╫E WILL HOWEVER USE THE TWO SUBROUTINES WRITEBYTE AND SETADRS
  841.   THAT WERE DEVELOPED IN THE PREVIOUS ROUTINE. ╘HE DATA WILL LOOK LIKE THE
  842.   FOLLOWING:
  843.  
  844.        .WORD ADDRESS
  845.        .BYTE NUM_OF_CHARS ($00= END OF DATA)
  846.        .ASCII "TEXT"
  847.        .BYTE ADDRESS .... ETC.... 
  848.  
  849.   AND WE'LL ENTER WITH .┴┘ CONTAINING THE ADDRESS OF THE TABLE.
  850.  
  851.   ╙O BASICALLY WE COME UP WITH THE FOLLOWING:
  852.  
  853. -------------------------------------------------------------------------------
  854.        WRITE'TXT = *
  855.                STA ZP1         ; SAVE .AY IN TABLE ADDRESS
  856.                STY ZP1+1
  857.                LDY #$00
  858.    LOOP'W'TEXT = *
  859.                JSR GET'BYTE   ; SET ADDRESS.
  860.                STA WRK
  861.                JSR GET'BYTE
  862.                STA WRK+1
  863.                JSR GET'BYTE    ; GET # OF CHARS TO WRITE OUT.
  864.                CMP #$00
  865.                BEQ +           ; IF ZERO THEN EXIT.
  866.                TAX
  867.                JSR SETADRS     ; SET ADDRESS TO WRK,WRK+1
  868.              - JSR GET'BYTE
  869.                JSR WRITEBYTE   ; WRITE OUT BYTE.
  870.                DEX
  871.                BNE -
  872.                SEC
  873.                BCS LOOP'W'TEXT ; THIS IS AN ABSOLUTE JUMP TO LOOP 
  874.              + RTS             ; RETURN.
  875.  
  876. -------------------------------------------------------------------------------
  877.  
  878.   ╘HIS IS SIMILAIR TO OUR PREVIOUS ROUTINE, AND WAS IN FACT COPIED AND MODIFIED  
  879.   FROM THE PREVIOUS ROUTINE. 
  880.  
  881.  
  882. ╓╔╔╔. ─EBUGGING
  883.       ---------
  884.  
  885.   ╬OW, NOT ALL PROGRAMS ARE PERFECT, AND DURING THE DEVELOPMENT OF THIS 
  886.   PORTION OF THE GAME THERE WERE SEVERAL ERRORS FOUND. ╘RACING AN ERROR IN
  887.   ═ACHINE/┴SSEMBLY-╠ANGUAGE IS LIKE TRYING TO FIND A GRAMMATICAL ERROR IN A
  888.   LANGUAGE YOU DON'T KNOW. ;-) ┬UT SERIOUSLY, THERE ARE SEVERAL WAYS TO TRACK
  889.   DOWN ERRORS IN YOUR CODE.
  890.  
  891.   1 - ╘RY TRACING IT THROUGH BY HAND PLAYING "╫HAT IF ╔ WERE THE COMPUTER" AND
  892.       FOLLOWING WHAT EACH REGISTER DOES.
  893.  
  894.   2 - ┴RE YOU SWITCHING THE ╠O╚I ORDER OF VARIABLES? ╔E: IS IT LDA #< OR 
  895.       LDA #>?? 
  896.  
  897.   3 - ╙ET ┬╥╦ POINTS AND RUN THE PROGRAM / SUBROUTINE WITHIN A MACHINE LANGUAGE
  898.       MONITOR AND MAKE SURE THE REGISTERS / MEMORY LOCATIONS CONTAIN THE VALUES
  899.       THAT THEY SHOULD. ╔F NOT, FIND OUT WHY.
  900.  
  901.   4 - ╘RY TO SIMPLIFY YOUR CODE IN TERMS OF PROGRAMMING EASE - ═AKE THE 
  902.       ASSEMBLER DO THE WORK FOR YOU - IT'S A LOT LESS LIKELY TO MAKE ERRORS 
  903.       THAN YOU ARE.
  904.   
  905.   5 - ╘HINK LOGICALLY!!!
  906.   
  907.   6 - ├HANGE SOMETHING AT RANDOM AND PRAY.
  908.  
  909.   ╔ CAN'T STRESS NUMBERS 3 AND 5 ENOUGH. ─URING THE WRITING OF THE INSTALL'CHAR  
  910.   ROUTINE THERE WERE NUMEROUS BUGS THAT WERE EVENTUALLY TRACKED DOWN BY 
  911.   SETTING A ┬╥╦ INSTRUCTION FURTHER ALONG IN THE CODE AND SEEING EXACTLY WHAT
  912.   THE REGISTER / MEMORY LOCATIONS WERE. ┴LSO THE USE OF TEMPORARY LOAD AND
  913.   STORE INSTRUCTIONS INTO "SAFE" REGIONS OF MEMORY HELPED ME MONITOR WHAT SOME
  914.   OF THE VALUES WERE.
  915.  
  916.   ╞OR EXAMPLE, AT ONE POINT ╔ HAD A SECTION OF CODE SIMILAIR TO THE FOLLOWING:
  917.  
  918.              CLC
  919.              LDA VALUE
  920.              ADC DATA
  921.              BNE +
  922.              INC DATA+1
  923.            + [.... ]
  924.  
  925.   ┴ND IT'S PURPOSE WAS TO ADD VALUE TO DATA. ╬OW ╔'VE FOUND SIMPLE ERRORS ARE
  926.   USUALLY FOUND LAST, AFTER COMPLEX ERRORS. ┴ND NOT UNTIL A SET A BREAK POINT
  927.   LIKE:
  928.  
  929.              CLC
  930.              LDA VALUE
  931.              ADC DATA    <-----═ISSING ╔NSTRUCTION AFTER HERE-------------+
  932.              BNE +                                                        ⁿ
  933.              INC DATA+1                                                   ⁿ
  934.            + ┬╥╦                                                          ⁿ
  935.              [.... ]                                                      ⁿ   
  936.                                                                           ⁿ
  937.   DID ╔ ACTUALLY FIGURE OUT THAT ╔ WAS MISSING THE ╙╘┴ ─┴╘┴ INSTRUCTION --+
  938.  
  939.   ╙O, WHEN WRITING, MODIFYING, AND TRYING TO DEBUG CODE TRY TO TAKE YOUR TIME
  940.   AND ISOLATE EVERY POSSIBLE PROBLEM. ┴LSO DON'T BE AFRAID TO STOP THE CODE
  941.   MID-STREAM AS IN THE ABOVE WITH USE OF THE ┬╥╦. ┘OU CAN ALWAYS REMOVE IT
  942.   (AND PROBAHLY SHOULD) IN THE FINAL CODE AND IT SERVES AS A VERY VALUABLE 
  943.   DEBUGGING TOOL WITH THE AID OF A MACHINE-LANGUAGE MONITOR.
  944.  
  945.   
  946. ╔╪. ═EMORY ═AP ├ONSIDERATIONS
  947.     -------------------------
  948.  
  949.   ┬EFORE YOU START A PROGRAM IT'S A GOOD IDEA TO CONSIDER WHERE IN MEMORY YOU
  950.   WILL HAVE EVERYTHING. ╬OW WE'VE ALREADY STARTED SOME OF THE PROGRAM ABOVE
  951.   AND JUST BLINDLY PICKED NUMBERS AT RANDOM IT SEEMED LIKE $3000 FOR THE 
  952.   CHARACTER SET FOR THE ├=64 ETC... ╫E DIDN'T - ╔'M INTRODUCING THE ═EMORY
  953.   ═AP ├ONSIDERATIONS HERE TO SHOW THE EXAMPLE OF WHAT IF WE DIDN'T THINK
  954.   ABOUT HOW MEMORY WAS GOING TO BE ORGANIZED.
  955.  
  956.   ╘HE ├=64 ONLY HAS 64K OF MEMORY OF WHICH TYPICALLY THE RANGE $0800-$A000
  957.   IS AVAILABLE AND $C000-$CFFF IS ALSO.  ╔F WE HAD BLINDLY PICKED NUMBERS
  958.   ALL OVER THE PLACE TO STORE OUR CODE THEN WE WOULD HAVE A DISORGANIZED
  959.   PROGRAM THAT WOULD MOST LIKELY ACCIDENTALLY USE ONE SUBROUTINES STORAGE
  960.   AS TEMPORARY DATA FOR ANOTHER. ╔T'S LIKE SHOOTING RANDOMLY IN ╠ASER ╘AG
  961.   NOT CHECKING TO SEE IF THERE IS A TARGET THERE OR NOT FIRST... ╘HE END
  962.   RESULT: ├HAOS.
  963.  
  964.   ├URRENTLY WE'RE NOT FOLLOWING THE RULE FOR "TEMPORARY VARIABLES" BUT AS
  965.   WE GRADUALLY FADE OUT OF THE NORMAL ├-64/128 DEFAULT MODE AND WRITE OUR
  966.   OWN ROUTINES / INTERRUPT HANDLERS WE'LL SWITCH THINGS OVER. ┴LSO, ON THE
  967.   ├=128 INSTEAD OF USING ┬ANK 0 WITH THE ╔/╧ BLOCK ENABLED WE'RE CURRENTLY
  968.   USING THE ┬┴╬╦ 15 CONFIGURATION AS THE PROGRAM DOESN'T EXTEND PAST $4000
  969.   YET ($0000-$4000 IS COMMON MEMORY IN THE NORMAL ├=128 CONFIGUARTION).
  970.  
  971.